// Package coding_round_1 day_01_stack_for_after_range_tree
// @Title coding_round_1
// @Description
// @Author  == 琳琳也叫王木木 ==  2021/9/2 11:55
// @Create  2021/9/2 11:55
package coding_round_1

// AfterRangeStack  使用栈实现二叉树的后序遍历
func AfterRangeStack(root *TreeNode) []int {
	if root == nil {
		return nil
	}
	ans := make([]int, 0)
	// 第一步 把头节点入栈
	var stack = []*TreeNode{root}
	for len(stack) > 0 {
		// 1. 从栈中弹出一个元素
		temp := stack[len(stack)-1]
		stack = stack[:len(stack)-1]
		// 1.1 将当前节点的数据域加入结果集
		ans = append(ans, temp.Val)
		// 2. 将当前元素的右节点入栈
		if temp.Right != nil {
			stack = append(stack, temp.Right)
		}
		// 3. 将当前元素的左节点入栈
		if temp.Left != nil {
			stack = append(stack, temp.Left)
		}
	}
	return ans
}
